var express = require('express');
var router = express.Router();
const md5 = require('blueimp-md5')
const {UserModel, chatModel} = require('../db/models')
const filter = { password: 0, __v: 0 }

/* GET home page. */
router.get('/', function (req, res, next) {
  res.render('index', { title: 'Express' });
});

/**
 * 注册一个路由：用户注册
 */
router.post('/register', function (req, res) {
  const { username, password, type } = req.body
  // 判断用户是否已经存在 存在：返回错误信息 不存在：保存
  // 查询
  UserModel.findOne({ username }, function (err, user) {
    if (user) {
      return res.send({ code: 1, msg: '用户已存在' })
    } else {
      // 保存
      new UserModel({ username, password: md5(password), type }).save(function (err, user) {

        // 生成一个cookie 1000毫秒 一共一天
        res.cookie('userId', user._id, { maxAge: 1000 * 60 * 60 * 24 })

        const data = { username, type, _id: user._id }

        return res.send({ code: 0, msg: data })
      })
    }
  })

})
/**
 * 登录路由：用户登录
 */
router.post('/login', function (req, res) {
  const { username, password } = req.body
  // 根据username和密码查询数据库 有：登录成功 没有：返回错误信息
  UserModel.findOne({ username, password: md5(password) }, filter, function (err, user) {
    if (err) {
      return res.send({ code: 500, msg: '服务器出错' })
    }
    if (user) {
      // 生成一个cookie， 交个浏览器保存
      res.cookie('userId', user._id, { maxAge: 1000 * 60 * 60 * 24 })
      // 返回登录成功信息
      res.send({ code: 0, msg: user })

    } else {
      return res.send({ code: 1, msg: '用户名或密码错误' })
    }
  })
})

// 更新用户信息路由
router.post('/update', function (req, res) {
  // 根据cookie得到userId
  const { userId } = req.cookies
  console.log(req.cookies);

  if (!userId) {
    return res.send({ code: 1, msg: '请先登录' })
  }

  // 根据userId得到提交用户数据
  const user = req.body
  UserModel.findByIdAndUpdate({ _id: userId }, user, function (err, oldUser) {
    if (!oldUser) {
      // 通知浏览器删除cookie 
      res.clearCookie('userId')
      return res.send({ code: 1, msg: '请先登录' })
      // 返回一个提示信息
    } else {
      const { _id, username, type } = oldUser
      const data = Object.assign({ _id, username, type }, user)
      return res.send({ code: 0, msg: data })
    }
  })

})
/**
 * 根据cookie的userId获取当前用户的user
 */
router.get('/user', function (req, res) {
  const userId = req.cookies.userId
  if (!userId) {
    return res.send({ code: 1, msg: '请先登录' })
  }

  // 根据userId查询user
  UserModel.findOne({ _id: userId }, filter, function (err, user) {
    if (err) {
      return res.send({ code: 1, data: '服务器错误' })
    }
    res.send({ code: 0, data: user })
  })
})
/**
 * 根据type获取用户列表
 */
router.get('/userList', function (req, res) {
  const { type } = req.query
  UserModel.find({ type }, filter, function (err, users) {
    res.send({ code: 0, data: users })
  })
})

/*
获取当前用户所有相关聊天信息列表
*/
router.get('/msglist', function (req, res) {
  // 获取 cookie 中的 userid
  const userid = req.cookies.userId
  console.log(userid);
  // 查询得到所有 user 文档数组
  UserModel.find(function (err, userDocs) {
    // 用对象存储所有 user 信息: key 为 user 的_id, val 为 name 和 header 组成的 user 对象
    const users = {} // 对象容器
    userDocs.forEach(doc => {
      users[doc._id] = {username: doc.username, header: doc.header}
    })

    /*
    查询 userid 相关的所有聊天信息
    参数 1: 查询条件
    参数 2: 过滤条件
    参数 3: 回调函数
    */
    chatModel.find({ '$or': [{ from: userid }, { to: userid }] }, filter, function (err,
      chatMsgs) {
      // 返回包含所有用户和当前用户相关的所有聊天消息的数据
      res.send({ code: 0, data: { users, chatMsgs } })
    })
  })
})
/*
修改指定消息为已读
*/
router.post('/readmsg', function (req, res) {
  // 得到请求中的 from 和 to
  const from = req.body.from
  const to = req.cookies.userId
  
  /*
  更新数据库中的 chat 数据
  参数 1: 查询条件
  参数 2: 更新为指定的数据对象
  参数 3: 是否 1 次更新多条, 默认只更新一条
  参数 4: 更新完成的回调函数
  */
  
  chatModel.updateMany({ from, to, read: false }, { $set: {read: true} }, function (err,
    doc) {
    console.log('/readmsg', doc)
    res.send({ code: 0, data: doc.nModified }) // 更新的数量
  })
})

// 删除所有数据的接口（禁用!!）
// router.post('/delete', function (req, res) {
//   const {name, pwd} = req.body
//   if (name ==='delete' && pwd === 'delete') {
//     UserModel.deleteMany({type: 'dashen'}, function (err, user) {
//       UserModel.find({type: 'dashen'}, function (err, users) {
//         res.send({code: 0, data: users})
//       })
//     })
//   }
// })

// 查找数据库的接口
router.get('/selfgetlist', function (req, res) {
  const {type} = req.query
  if (type ==='user') {
    UserModel.find(function (err, datas) {
      res.send({code: 0, data: datas})
    })
  }
  if (type ==='chat') {
    chatModel.find(function (err, datas) {
      res.send({code: 0, data: datas})
    })
  }

})

module.exports = router;
